import { NextResponse } from 'next/server';
import { prisma } from '@/lib/prisma';
import * as fs from 'fs';
import * as path from 'path';
import { v4 as uuidv4 } from 'uuid';

// 上传目录路径
const uploadDir = 'D:\\upload';

export async function GET(request: Request, { params }: { params: { id: string } }) {
  try {
    const id = parseInt(params.id);
    
    if (isNaN(id)) {
      return NextResponse.json(
        { error: '无效的轮播图ID' },
        { status: 400 }
      );
    }
    
    const carousel = await prisma.carousel.findUnique({
      where: { id }
    });
    
    if (!carousel) {
      return NextResponse.json(
        { error: '轮播图不存在' },
        { status: 404 }
      );
    }
    
    return NextResponse.json({ carousel }, { status: 200 });
  } catch (error) {
    console.error('获取轮播图详情失败:', error);
    return NextResponse.json(
      { error: '获取轮播图详情失败' },
      { status: 500 }
    );
  }
}

export async function PUT(request: Request, { params }: { params: { id: string } }) {
  try {
    const id = parseInt(params.id);
    
    if (isNaN(id)) {
      return NextResponse.json(
        { error: '无效的轮播图ID' },
        { status: 400 }
      );
    }
    
    const formData = await request.formData();
    const imageFile = formData.get('image') as File | null;
    const hyperlink = formData.get('hyperlink') as string | null;
    
    // 查找现有轮播图
    const existingCarousel = await prisma.carousel.findUnique({
      where: { id }
    });
    
    if (!existingCarousel) {
      return NextResponse.json(
        { error: '轮播图不存在' },
        { status: 404 }
      );
    }
    
    let imageUrl = existingCarousel.imageUrl;
    
    // 处理图片上传
    if (imageFile) {
      const bytes = await imageFile.arrayBuffer();
      const buffer = Buffer.from(bytes);
      
      // 生成唯一文件名
      const fileName = `${uuidv4()}_${imageFile.name}`;
      const filePath = path.join(uploadDir, fileName);
      
      // 写入文件
      fs.writeFileSync(filePath, buffer);
      
      // 使用绝对路径作为图片URL，便于小程序访问
      imageUrl = filePath;
      
      // 删除旧图片文件（如果存在）
      if (existingCarousel.imageUrl) {
        try {
          // 直接使用存储的绝对路径删除文件
          if (fs.existsSync(existingCarousel.imageUrl)) {
            fs.unlinkSync(existingCarousel.imageUrl);
          }
        } catch (err) {
          console.error('删除旧图片失败:', err);
          // 继续执行，不影响更新操作
        }
      }
    }
    
    // 更新轮播图
    const updatedCarousel = await prisma.carousel.update({
      where: { id },
      data: {
        imageUrl,
        hyperlink
      }
    });
    
    return NextResponse.json({ carousel: updatedCarousel }, { status: 200 });
  } catch (error) {
    console.error('更新轮播图失败:', error);
    return NextResponse.json(
      { error: '更新轮播图失败' },
      { status: 500 }
    );
  }
}

export async function DELETE(request: Request, { params }: { params: { id: string } }) {
  try {
    const id = parseInt(params.id);
    
    if (isNaN(id)) {
      return NextResponse.json(
        { error: '无效的轮播图ID' },
        { status: 400 }
      );
    }
    
    // 查找现有轮播图
    const existingCarousel = await prisma.carousel.findUnique({
      where: { id }
    });
    
    if (!existingCarousel) {
      return NextResponse.json(
        { error: '轮播图不存在' },
        { status: 404 }
      );
    }
    
    // 删除图片文件（如果存在）
    if (existingCarousel.imageUrl) {
      try {
        // 直接使用存储的绝对路径删除文件
        if (fs.existsSync(existingCarousel.imageUrl)) {
          fs.unlinkSync(existingCarousel.imageUrl);
        }
      } catch (err) {
        console.error('删除图片文件失败:', err);
        // 继续执行，不影响删除操作
      }
    }
    
    // 删除轮播图记录
    await prisma.carousel.delete({
      where: { id }
    });
    
    return NextResponse.json({ success: true }, { status: 200 });
  } catch (error) {
    console.error('删除轮播图失败:', error);
    return NextResponse.json(
      { error: '删除轮播图失败' },
      { status: 500 }
    );
  }
}